import jwt from 'jsonwebtoken';
import { Request, Response, NextFunction } from 'express';

// 扩展 Express 的 Request 接口以包含 user 属性
declare global {
    namespace Express {
        interface Request {
            user?: any;
        }
    }
}

// 验证 JWT Token 的中间件
export const tokenVerification = (req: Request, res: Response, next: NextFunction): Response | void => {
    const authHeader = req.headers['authorization'];
    const token = authHeader?.split(' ')[1];  // 获取 "Bearer <token>" 中的 token 部分

    // 如果没有 token，返回 401 错误
    if (!token) {
        return res.status(401).json({
            isSucc: false,
            error: "No Token"
        });
    }

    try {
        // 验证 token，解码并获取用户信息
        const decoded = jwt.verify(token, process.env.JWT_SECRET as string) as jwt.JwtPayload;
        req.user = decoded;  // 将解码后的信息赋值给 req.user
        return next();
    } catch (error) {
        return res.status(401).json({
            isSucc: false,
            error: "无效的 Token！"
        });
    }
};
